package com.example.demo.advice;

import com.example.demo.exception.CustomizeEXception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

//import javax.servlet.http.HttpServletRequest;

/**
 * 8
 * <p>
 * 2021.8.4  错误提示 避免白叶
 * <p>
 * 通过hander进行处理
 *
 * 身是内置了一个异常处理机制的, 会判断请求头的参数来区分要返回 JSON 数据还是错误页面. 源码为:
 *
 * 这个是拦截器但是不能拦截404 和500 这种  需要自定义
 */

@ControllerAdvice
public class CustomizeExceptionHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(CustomizeExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    ModelAndView handle( Throwable e, Model model) {
//        HttpStatus status = getStatus(request);

        if(e instanceof CustomizeEXception){
//            如果包含这个异常
            model.addAttribute("message",e.getMessage());// 返回这个异常信息

        }else{
//            处理不了的异常直接显示

       model.addAttribute("message","服务器冒烟了 ");
        }
        model.addAttribute("message","服务器已经冒烟了，稍后试试");
        return new ModelAndView("error");
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if (statusCode == null) {
            return HttpStatus.INTERNAL_SERVER_ERROR;
        }
        return HttpStatus.valueOf(statusCode);
    }


}


//
//
//————————————————
//        版权声明：本文为CSDN博主「B3325」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
//        原文链接：https://blog.csdn.net/B3325/article/details/94602550